package DailyPractice;

//递归方法测试
public class RecursiveMethodText {

    //递归求n的阶乘
    public static int recursiveFactNumber(int n) {
        if (n == 1) {
            return 1;
        } else {
            return n * recursiveFactNumber(n - 1);
        }
    }

    //递归求和
    public static int getSumNumber(int n) {
        if (n <= 1) {
            return n;
        } else {
            return n + getSumNumber(n - 1);
        }
    }

    //用递归方法按位打印数字
    public static void getNumber(int n) {
        if (n >= 10) {
            getNumber(n / 10);
        }
        System.out.print(n % 10 + " ");
    }

    //求返回的数字之和，即输入一个非负整数，返回组成它的数字之和
    public static int getDigitSum(int n) {
        if (n < 10) {
            // 当n只有一位数时，直接返回n
            return n;
        } else {
            // 将n的个位数和其他数相加再进行递归
            return n % 10 + getDigitSum(n / 10);
        }
    }

    //递归求斐波那契数列
    public static int getFibonacci(int n) {
        if (n <= 0) {
            return 0;
        } else if (n == 1 || n == 2) {
            return 1;
        } else {
            return getFibonacci(n - 1) + getFibonacci(n - 2);
        }
    }

    public static void main(String[] args) {
        /*//求n的阶乘
        int n = 5;
        System.out.println(n + "! = " + recursiveFactNumber(n));*/
        /*//求n的和
        int n = 10;
        System.out.println("1 + 2 + 3 + …… + 10 = "+getSumNumber(n));*/
        /*//打印数字
        getNumber(1234);*/
        /*//求返回的数字之和
        int n = 12345;
        System.out.println("数字 " + n + " 的各位数字之和为 " + getDigitSum(n));*/
    }
}
